home *** CD-ROM | disk | FTP | other *** search
- /***************************************************************************
- LFReadClock.c V1.1 13/05/1992
-
- But: Lit l'horloge des cartes Spirits car le READCLOCK founi donne une
- mauvaise date lors des annees bisextiles
-
- Historique :
- * V 1.0 Jan/Fev 1992 : Premiere version,
- * V 1.1 13 mai 1992 : N'éxécute plus Date, affichage en français si
- cette langue a été choisie.
-
- ***************************************************************************/
- #include <exec/types.h>
- #include <devices/timer.h>
- #include <time.h>
- #include <string.h>
- #define FastLF
- #define U_ARP
- #include <LF.h>
- #include <stdlib.h>
-
- typedef unsigned char UCHAR;
-
- char stime[10];
- char date[10];
-
- char lang=0;
-
- const char *err_no_clk[]={"Can't find Spirit clock","horloge Spirit absante"},
- *err_op_tmr[]={"Can't open Timer.device","Impossible d'ouvrir le Timer.device"},
- *err_ex_tmr[]={"Can't talk to timer device","Impossible d'envoyer une commande au Timer.device"},
- *sys_clk_ok[]={"System clock updated.","Horloge systeme mise a l'heure."};
-
- struct SpiritClk {
- UCHAR inc;
- UCHAR vide1;
- UCHAR sec;
- UCHAR vide2;
- UCHAR mn;
- UCHAR vide3;
- UCHAR heure;
- UCHAR vide4;
- UCHAR js;
- UCHAR vide5;
- UCHAR jour;
- UCHAR vide6;
- UCHAR mois;
- UCHAR vide7;
- UCHAR annee;
- };
-
- void bcd2char (UCHAR x,char *bf)
- {
- char t[2];
-
- t[1]=0;
- *t=(x >> 4)+'0';
- strcat(bf,t);
- *t=(x & 15)+'0';
- strcat(bf,t);
- }
-
- void setsystemtime(ds)
- struct DateStamp *ds;
- {
- struct timerequest tr;
- long secs= ds->ds_Days*86400 + ds->ds_Minute*60 + ds->ds_Tick/TICKS_PER_SECOND;
-
- if (OpenDevice(TIMERNAME, UNIT_VBLANK, &tr, 0L)) {
- Puts(err_op_tmr[lang]);
- return;
- }
- tr.tr_node.io_Message.mn_Node.ln_Type = NT_MESSAGE;
- tr.tr_node.io_Message.mn_Node.ln_Pri = 0L;
- tr.tr_node.io_Message.mn_Node.ln_Name = NULL;
- tr.tr_node.io_Message.mn_ReplyPort = NULL;
- tr.tr_node.io_Command = TR_SETSYSTIME;
- tr.tr_time.tv_secs = secs;
- tr.tr_time.tv_micro = 0L;
- if (DoIO (&tr)) puts(err_ex_tmr[lang]);
- CloseDevice (&tr);
- }
-
- void main()
- {
- struct SpiritClk *spc= (struct SpiritClk *)0xdc0ff1;
- struct DateTime dt;
- time_t tt;
-
- OpenArp();
-
- if(!stricmp(getenv("Lang"),"Français"))
- lang=1;
-
- if(spc->inc!=spc->inc){
- Puts(err_no_clk[lang]);
- exit(0);
- }
-
- bcd2char(spc->heure,stime);
- strcat(stime,":");
- bcd2char(spc->mn,stime);
- strcat(stime,":");
- bcd2char(spc->sec,stime);
-
- bcd2char(spc->jour,date);
- strcat(date,"-");
- bcd2char(spc->mois,date);
- strcat(date,"-");
- bcd2char(spc->annee,date);
-
- dt.dat_Format=FORMAT_DOS;
- dt.dat_Flags=DTF_FUTURE;
- dt.dat_StrDate=date;
- dt.dat_StrTime=stime;
-
- StrtoStamp(&dt);
- setsystemtime(&(dt.dat_Stamp));
- puts(sys_clk_ok[lang]);
- switch(lang){
- case 1: /* Français */
- puts(cheure());
- break;
- default :
- time(&tt);
- puts(ctime(&tt));
- }
- CloseArp();
- exit(0);
- }
-